From f2fbdb2761b17c9a8eb3cfefe511964efd1b6da0 Mon Sep 17 00:00:00 2001 From: Jimi Xenidis Date: Thu, 31 Aug 2006 17:47:11 -0400 Subject: [PATCH] [POWERPC][XEN] Make MPIC sharing between Xen and Dom0 optional Tho right now it is the only option. Signed-off-by: Jimi Xenidis Signed-off-by: Hollis Blanchard --- xen/arch/powerpc/mpic_init.c | 61 +++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 21 deletions(-) diff --git a/xen/arch/powerpc/mpic_init.c b/xen/arch/powerpc/mpic_init.c index 5977868451..0b1d769108 100644 --- a/xen/arch/powerpc/mpic_init.c +++ b/xen/arch/powerpc/mpic_init.c @@ -27,6 +27,8 @@ #include "of-devtree.h" #undef DEBUG +#define CONFIG_SHARE_MPIC + #ifdef DEBUG #define DBG(fmt...) printk(fmt) #else @@ -319,8 +321,43 @@ static int find_mpic(void) return rc; } +#ifdef CONFIG_SHARE_MPIC static struct hw_interrupt_type hc_irq; +static struct hw_interrupt_type *share_mpic( + struct hw_interrupt_type *mpic_irq, + struct hw_interrupt_type *xen_irq) +{ + hc_irq.startup = mpic_irq->startup; + mpic_irq->startup = xen_irq->startup; + + hc_irq.enable = mpic_irq->enable; + mpic_irq->enable = xen_irq->enable; + + hc_irq.disable = mpic_irq->disable; + mpic_irq->disable = xen_irq->disable; + + hc_irq.shutdown = mpic_irq->shutdown; + mpic_irq->shutdown = xen_irq->shutdown; + + hc_irq.ack = mpic_irq->ack; + mpic_irq->ack = xen_irq->ack; + + hc_irq.end = mpic_irq->end; + mpic_irq->end = xen_irq->end; + + hc_irq.set_affinity = mpic_irq->set_affinity; + mpic_irq->set_affinity = xen_irq->set_affinity; + + return &hc_irq; +} + +#else /* CONFIG_SHARE_MPIC */ + +#define share_mpic(M,X) (M) + +#endif + struct hw_interrupt_type *xen_mpic_init(struct hw_interrupt_type *xen_irq) { unsigned int isu_size; @@ -329,6 +366,7 @@ struct hw_interrupt_type *xen_mpic_init(struct hw_interrupt_type *xen_irq) unsigned int ipi_offset; unsigned char *senses; unsigned int senses_count; + struct hw_interrupt_type *hit; printk("%s: start\n", __func__); @@ -356,29 +394,10 @@ struct hw_interrupt_type *xen_mpic_init(struct hw_interrupt_type *xen_irq) BUG_ON(mpic == NULL); mpic_init(mpic); - hc_irq.startup = mpic->hc_irq.startup; - mpic->hc_irq.startup = xen_irq->startup; - - hc_irq.enable = mpic->hc_irq.enable; - mpic->hc_irq.enable = xen_irq->enable; - - hc_irq.disable = mpic->hc_irq.disable; - mpic->hc_irq.disable = xen_irq->disable; - - hc_irq.shutdown = mpic->hc_irq.shutdown; - mpic->hc_irq.shutdown = xen_irq->shutdown; - - hc_irq.ack = mpic->hc_irq.ack; - mpic->hc_irq.ack = xen_irq->ack; - - hc_irq.end = mpic->hc_irq.end; - mpic->hc_irq.end = xen_irq->end; - - hc_irq.set_affinity = mpic->hc_irq.set_affinity; - mpic->hc_irq.set_affinity = xen_irq->set_affinity; + hit = share_mpic(&mpic->hc_irq, xen_irq); printk("%s: success\n", __func__); - return &hc_irq; + return hit; } int xen_mpic_get_irq(struct cpu_user_regs *regs) -- 2.30.2